package com.wargame.engine;

import com.wargame.hexmap.HexagonalMap;
import com.wargame.hexmap.Offset;


/**
 * 判断算子之间是否通视
 * @param oprType 算子类型："Infantry|Vehicle|Aircraft"
 * @param targetType 目标算子类型
 * @param oprCurHex 算子当前位置
 * @param targetCurHex 目标算子当前位置
 * @param oprObserveDistance 算子观察距离
 * @param targetMoveState 目标机动状态
 * @return
 */
public boolean ToJudge(HexagonalMap map, String oprType, String targetType, Offset oprCurHex, Offset targetCurHex,
                             Map<String, Integer> oprObserveDistance, String targetMoveState)
{
    int mode = map.getMode(oprType, targetType);// 取得通视模式
    if (mode < 0) return false;// 没有的通视模式

    if (!map.canSee(oprCurHex, targetCurHex, mode)) return false;// 己方算子和目标算子的所在六角格之间不能通视，则算子之间也不能通视

    int dist = map.getDistance(oprCurHex, targetCurHex);// 取得算子之间的距离
    // 坦克对坦克的视野最大是25格
    int observeDist = oprObserveDistance.get(targetType);// 取得己方算子对目标类型的算子的最大观察距离

    int row = targetCurHex.row;
    int col = targetCurHex.col;
    int oprRow = oprCurHex.row;
    int oprCol = oprCurHex.col;

    // 优势地形，视距减半
    if (this.get(row, col).getCond() == 1 ||
            this.get(row, col).getCond() == 2)  // 目标所在地形为森林（1）或者居民地（2）
    {
        observeDist = observeDist / 2;// 视距减半
    }

    // 目标高程优势+目标掩蔽，视距减半 飞机对车辆除外
    if ((this.get(oprRow, oprCol).getElev() <= this.get(row, col).getElev()) &&
            targetMoveState.equals("Shelt") &&
            (!oprType.equals("Aircraft") || !targetType.equals("Vehicle")))
    {
        observeDist = observeDist / 2;// 视距减半
    }

    if (dist > observeDist) return false;// 算子之间的距离大于视距，不可通视

    return true;// 否则可以通视
}